package com.huangsm.concurrence.concurrentmap;

import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;

/**
 * 并发导航映射
 * @author huang
 * @date 2019/2/14
 */
public class ConcurrentNavigableMapDemo {
    /**
     * java.util.concurrent.ConcurrentNavigableMap 是一个支持并发访问的 java.util.NavigableMap，它还能让它的子 map 具备并发访问的能力。
     * 所谓的 "子 map" 指的是诸如 headMap()，subMap()，tailMap() 之类的方法返回的 map。
     */
    public static void main(String[] args) {

        /**
         * headMap()
         * headMap(T toKey) 方法返回一个包含了小于给定 toKey 的 key 的子 map。
         * 如果你对原始 map 里的元素做了改动，这些改动将影响到子 map 中的元素(译者注：map 集合持有的其实只是对象的引用)。
         */
        ConcurrentNavigableMap concurrentNavigableMap=new ConcurrentSkipListMap();
        concurrentNavigableMap.put("1","2");
        concurrentNavigableMap.put("2","3");
        ConcurrentNavigableMap concurrentNavigableMap1 = concurrentNavigableMap.headMap("2");
        System.out.println(concurrentNavigableMap1.keySet());
        /**
         * tailMap()
         * tailMap(T fromKey) 方法返回一个包含了不小于给定 fromKey 的 key 的子 map。
         * 如果你对原始 map 里的元素做了改动，这些改动将影响到子 map 中的元素(译者注：map 集合持有的其实只是对象的引用)。
         */
        /**
         * subMap() 方法返回原始 map 中，键介于 from(包含) 和 to (不包含) 之间的子 map。
         */
        /**
         * ConcurrentNavigableMap 接口还有其他一些方法可供使用，比如：
         * descendingKeySet()
         * descendingMap()
         * navigableKeySet()
         */
    }
}
